CREATE SEQUENCE AUTO_IDCARGO INCREMENT BY 1 MINVALUE 10000001;

CREATE OR REPLACE TRIGGER GENERA_CARGOS
AFTER INSERT ON INSCRIPCION
FOR EACH ROW
DECLARE
	TYPE CURSOR_GENERA_CARGOS IS REF CURSOR;
	VCURSOR 			CURSOR_GENERA_CARGOS;
	IDNIVEL$ 			NUMBER(8);
	IDGRADO$ 			NUMBER(8);
	IDSERVICIO$ 		NUMBER(8);
	PRECIO$ 			NUMBER(12,2);
	TIPO$ 				VARCHAR(45);
	IDINSCRIPCION$ 		NUMBER(8);
	CICLOESCOLAR$ 		VARCHAR(20);
	FECHAINSCRIPCION$ 	DATE;
	IDALUMNO$ 			NUMBER(8);


	IDNIVEL_NUEVO$ 	NUMBER(8);
	IDGRADO_NUEVO$ 	NUMBER(8);
	IDALUMNO_NUEVO$ NUMBER(8);

	FECHAVEN$ 		DATE;
	FECHAPAGO$ 		DATE;	
BEGIN
	SELECT :NEW.IDGRADO INTO IDNIVEL_NUEVO$ FROM INSCRIPCION;
	SELECT :NEW.IDNIVEL INTO IDGRADO_NUEVO$ FROM INSCRIPCION;
	SELECT :NEW.IDALUMNO INTO IDALUMNO_NUEVO$ FROM INSCRIPCION;
	
	OPEN VCURSOR FOR
					SELECT IDNIVEL,IDGRADO,IDSERVICIO,PRECIO,TIPO,IDINSCRIPCION,CICLOESCOLAR,FECHAINSCRIPCION,IDALUMNO FROM NIVEL_GRADO NATURAL JOIN GRADO_SERVICIO NATURAL JOIN SERVICIO NATURAL JOIN INSCRIPCION 
					WHERE IDNIVEL=IDNIVEL_NUEVO$ AND IDGRADO=IDGRADO_NUEVO$ AND IDALUMNO=IDALUMNO_NUEVO$;

	LOOP
		FETCH VCURSOR INTO IDNIVEL$,IDGRADO$,IDSERVICIO$,PRECIO$,TIPO$,IDINSCRIPCION$,CICLOESCOLAR$,FECHAINSCRIPCION$,IDALUMNO$;
		EXIT WHEN VCURSOR%NOTFOUND;

		CASE IDSERVICIO$
						WHEN 10000001 THEN--COLEGIATURA
											
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,SYSDATE,SYSDATE,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000002 THEN--INSCRIPCION
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,SYSDATE,SYSDATE,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000003 THEN--MATERIAL ESCOLAR
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000004 THEN--UNIFORME
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000005 THEN--LIBROS
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000006 THEN--SEGURO MEDICO
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
						WHEN 10000007 THEN--TRANSPORTE
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO$,1,0,0,NULL,NULL,IDINSCRIPCION$,IDSERVICIO$);	
		END CASE;
	
	END LOOP;
END GENERA_CARGOS;
/